package 暴力递归;

import java.util.ArrayList;
import java.util.List;

public class PrintAllSubsquences {
    public static List<String> subs(String s){
        char[] str = s.toCharArray();
        String path = "";         // 一开始之前没有决定所以为空
        List<String> ans = new ArrayList<>();
        process1(str,0,ans,path);
        return ans;
    }

    // str 固定参数
    // 来到了str[index]字符，index是位置
    // str[0....index-1]已经走过了！之前的决定，都在path上
    // 之前的决定已经不能改变了，就是path
    // str[index...]之后的还能决定，之前的已经确定，而后面还能自由选择的话
    // 把所有生成的子序列，放到ans中去
    public static void process1(char[] str, int index, List<String> ans,String path){
        if (index == str.length){
            ans.add(path);
            return;
        }
        // 没有要index位置的字符
        process1(str,index+1,ans,path);
        // 要了index位置的字符
        process1(str,index+1,ans,path + String.valueOf(str[index]));
    }
}
